package cn.sixmillioins.jvm;

/**
 * @author sixmillions
 * java加载方式：懒加载，用到了才去加载
 * 加载到jvm步骤：加载 -> 验证 -> 准备 -> 解析 -> 初始化
 */
public class D001DynamicLoad {

    static {
        //静态代码快在初始化阶段执行
        System.out.println("======== Load D001DynamicLoad ========");
    }

    public D001DynamicLoad() {
        //构造方法，new的时候才执行
        System.out.println("======== Init D001DynamicLoad ========");
    }

    public static void main(String[] args) {
        //用到D001DynamicLoad，将D001DynamicLoad加载到jvm，在初始化阶段执行静态代码块，new的时候用到构造
        new D001DynamicLoad();
        //用到A，A加载
        new A();
        System.out.println("======== 加载顺序测试 ========");
        //没用到B，B不会加载
        B b = null;
        //用到B，B加载
        //B bb = new B();
    }

}

class A {
    static {
        //静态代码快在初始化阶段执行
        System.out.println("======== Load A ========");
    }

    public A() {
        //构造方法，new的时候才执行
        System.out.println("======== Init A ========");
    }
}

class B {
    static {
        //静态代码快在初始化阶段执行
        System.out.println("======== Load B ========");
    }

    public B() {
        //构造方法，new的时候才执行
        System.out.println("======== Init B ========");
    }
}